{{tag>BROUILLON}}
====== Samba - Active Directory Domain Controller (AD DC) ======

Brouillon avant de compléter ou créer un nouvelle page concernant l'authentification d'un utilisateur avec Samba AD DC

La version actuelle se trouve ici [[:samba-active-directory|Samba - Active Directory Domain Controller (AD DC)]]
...

===== Versions =====
...
===== Installation de Samba=====
==== Paramètres généraux ====
Avant toute installation, il est nécessaire de définir son environnement. Ainsi, il sera possible de configurer correctement son serveur. Le reste de cette documentation se basera sur les paramètres suivants :

|Nom de domaine |example.com | \\ RFC 2606
|Royaume (realm) |EXAMPLE.COM |
|Nom de NetBIOS |example |
|Nom du serveur |ubndc01 |
|Adresse IP du serveur |192.168.1.11 |
|Rôle du serveur |DC (contrôleur de domaine) |
==== Pré-requis ====
...
==== Installation à partir des dépôts ====
...
==== Installation à partir des sources ====
...
===== Création d'un premier DC dans une nouvelle forêt =====
...
==== Initialisation de Samba ====
...
==== Démarrer Samba AD DC ====
...
===== Test de Samba AD DC =====
...
==== Tests des ACL ====
...
==== Tests des attributs étendus ====
...
==== Tests du DNS ====
...
==== Tests de Kerberos ====
...
==== Tests de SMB ====
...
===== Mise à jour depuis un domaine Samba de type NT4 vers un AD=====
...
===== Authentification avec Samba AD DC =====
==== Authentification des utilisateurs sur le DC ====
<code>sudo apt-get install libnss-winbind libpam-winbind winbind</code>

Ajout de winbin dans le fichier de configuration de /etc/nsswitch
<file - /etc/nsswitch.conf>...
    passwd: compat winbind
    group:  compat winbind
...
</file>

Ceci permet d'utiliser les utilisateurs et groupes venant de AD.
Par défaut sur un DC, les commandes ci-dessous retourne la liste de tous les utilisateurs et groupes.
<code>getent passwd
getent group</code>

Création du home directory pour l'utilisateur du domaine.
<file - /usr/share/pam-configs/mkhomedir>
Default: no
Priority: 900
Session-Type: Additional
Session-Final:
        required        pam_mkhomedir.so skel=/etc/skel umask=0077 silent
</file>

Alternative en mofdifiant le fichier /usr/share/pam-config/winbind
<file - /usr/share/pam-config/winbind>...
Session:
        optional                        pam_winbind.so mkhomedir
...</file>

Un autre alternative consiste à monter le home directory de l'utilisateur lors du login. Une option du fichier de configuration /etc/samba/smb.conf est //homedir map = auto.home//. Ceci fait référence à autofs. Développement Ult.

Possibilité de limiter l'accès à un ou plusieurs groupes ou utilisateurs sur base du SID
Ajouter require_membership_of=SID à la fin de la ligne pam_winbind.so de la section Auth: du fichier /usr/share/pam-config/winbind
<file - /usr/share/pam-config/winbind>...
Auth:
        [success=end default=ignore]    pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass required_membership_of=S-1-5-21-5555555555-555555555-5555555555-512
...</file>
Le RID 512 représente le groupe //Domain Admins//

Activer cette nouvelle configuration :
<code>sudo pam-auth-update</code>

==== Générer les uidNumber et gidNumber dans l'AD ====
Deux scripts "maisons" :
<file - uid_master.sh>
#!/bin/bash

# Vérifier si ces valeurs existent dans smb.conf
# idmap config REALM:range = min-max
rangeMin=100000
rangeMax=999999

sam=/var/lib/samba/private/sam.ldb
tmpDir=$(mktemp -d --tmpdir addUid.XXXXXX) || exit 1
umask 0077

ldbsearch -H $sam '(&(objectclass=user)(!(objectclass=computer)))' uidNumber | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpDir/r

maxUid=$rangeMin
for file in `grep -l -E "^uidNumber=" $tmpDir/*`
do
  source $file
  if [ $uidNumber -gt $rangeMax ]
  then
    echo "Warning: uidNumber $uidNumber for $dn is bigger than max id $rangeMax" 1>&2
  elif [ $uidNumber -lt $rangeMin ]
  then
    echo "Warning: uidNumber $uidNumber for $dn is lower than min id $rangeMin" 1>&2
  else
    [ $uidNumber -gt $maxUid ] && maxUid=$uidNumber
  fi
done

echo "Max UID found: $maxUid"

uidNumber=$(($maxUid+1))
for file in `grep -L -E "^uidNumber=" $tmpDir/*`
do
  source $file
  echo "Adding uidNumber: $uidNumber for dn: $dn"
  echo "dn: $dn
changetype: modify
add: uidNumber
uidNumber: $uidNumber" > $tmpDir/ldif
  ldbmodify -H $sam $tmpDir/ldif
  uidNumber=$(($uidNumber+1))
done

rm -r $tmpDir
</file>
<file bash gid_master.sh>
#!/bin/bash
# Vérifier si ces valeurs existent dans smb.conf
# idmap config REALM:range = min-max
rangeMin=100000
rangeMax=999999

sam=/var/lib/samba/private/sam.ldb
tmpDir=$(mktemp -d --tmpdir addGid.XXXXXX) || exit 1
umask 0077

ldbsearch -H $sam '(objectclass=group)' gidNumber | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpDir/r

maxGid=$rangeMin
for file in `grep -l -E "^gidNumber=" $tmpDir/*`
do
  source $file
  if [ $gidNumber -gt $rangeMax ]
  then
    echo "Warning: gidNumber $gidNumber for $dn is bigger than max id $rangeMax" 1>&2
  elif [ $gidNumber -lt $rangeMin ]
  then
    echo "Warning: gidNumber $gidNumber for $dn is lower than min id $rangeMin" 1>&2
  else
    [ $gidNumber -gt $maxGid ] && maxGid=$gidNumber
  fi
done

echo "Max GID found: $maxGid"

gidNumber=$(($maxGid+1))
for file in `grep -L -E "^gidNumber=" $tmpDir/*`
do
  source $file
  echo "Adding gidNumber: $gidNumber for dn: $dn"
  echo "dn: $dn
changetype: modify
add: gidNumber
gidNumber: $gidNumber" > $tmpDir/ldif
  ldbmodify -H $sam $tmpDir/ldif
  gidNumber=$(($gidNumber+1))
done

rm -r $tmpDir
</file>


===== Informations optionnelles et complémentaires =====
...
===== Références =====
...
//Contributeurs principaux : [[utilisateurs:bcag2|bcag2]], [[:utilisateurs:Qedinux|Qedinux]]//